home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / Ant Movie Catalog 3.5.0.2 / amc_install.exe / {app} / Scripts / Amazon (large pic).ifs < prev    next >
Text File  |  2005-05-05  |  7KB  |  195 lines

  1. (***************************************************
  2.  
  3. Ant Movie Catalog importation script
  4. www.antp.be/software/moviecatalog/
  5.  
  6. [Infos]
  7. Authors=polnjumen (polnjumen@yahoo.com)
  8. Title=Amazon
  9. Description=Import picture & editorial review from Amazon
  10. Site=www.amazon.com
  11. Language=EN
  12. Version=1.0
  13. Requires=3.5.0
  14. Comments=Based on the script made for version 3.4.0 by facts (jfacts1731@yahoo.com)
  15. License=This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
  16. GetInfo=1
  17.  
  18. [Options]
  19. GetReview=2|1|0=Do not get Editorial Review|1=Save Editorial Review into Description field|2=Save Editorial Review into Comment field
  20.  
  21. ***************************************************)
  22.  
  23. program Amazon;
  24.  
  25. uses
  26.   StringUtils1;
  27.  
  28. var
  29.   AmazonPage: TStringList;
  30.   THolder, MovieName : string;
  31.   LineNr, I: Integer;
  32.  
  33. function GetToken(aString, SepChar: String; TokenNum: Integer):String;
  34. var
  35.    Token     : string;
  36.    StrLen    : Integer;
  37.    TNum      : Integer;
  38.    TEnd      : Integer;
  39.  
  40. begin
  41.      StrLen := Length(aString);
  42.      TNum   := 1;
  43.      TEnd   := StrLen;
  44.      while ((TNum <= TokenNum) and (TEnd <> 0)) do
  45.      begin
  46.           TEnd := Pos(SepChar,aString);
  47.           if TEnd <> 0 then
  48.           begin
  49.                Token := Copy(aString,1,TEnd-1);
  50.                Delete(aString,1,TEnd);
  51.                TNum := TNum + 1;
  52.           end
  53.           else
  54.           begin
  55.                Token := aString;
  56.           end;
  57.      end;
  58.      if TNum >= TokenNum then
  59.      begin
  60.           GetToken := Token;
  61.      end
  62.      else
  63.      begin
  64.           GetToken := '';
  65.      end;
  66. end;
  67.  
  68. function AsinParse(Line : string): string;
  69. begin
  70.   Result := GetToken(GetToken(Line,'.',2),Chr(34),1);
  71. end;
  72.  
  73. // ***** analyze the page containing movie information *****
  74.  
  75. procedure AnalyzeMoviePage(AsinNr: string);
  76. var
  77.   MovieURL, PageText, Value, Value2: string;
  78.   LP: integer;
  79. begin
  80.   GetPicture('http://images.amazon.com/images/P/' + AsinNr + '.01.LZZZZZZZ.jpg');
  81.   MovieURL := 'http://www.amazon.com/exec/obidos/tg/detail/-/' + AsinNr + '/';
  82.   PageText := GetPage(MovieURL);
  83.   // URL
  84.   if CanSetField(fieldURL) then
  85.     SetField(fieldURL, MovieURL);
  86.   // DVD Title & Year
  87.   if CanSetField(fieldOriginalTitle) or CanSetField(fieldYear) then
  88.   begin
  89.     Value := TextBetween(PageText, '<title>', '</title>');
  90.     LP := LastPos('(', Value);
  91.     Value2 := Copy(Value, LastPos('(', Value) + 1, 4);
  92.     if CanSetField(fieldYear) then
  93.       SetField(fieldYear, Value2);
  94.     Value2 := TextBetween(Value, 'Amazon.com: DVD: ',' ('+ Value2);
  95.     HTMLDecode(Value2);
  96.     if CanSetField(fieldOriginalTitle) then
  97.       SetField(fieldOriginalTitle, Value2);
  98.   end;
  99.   //Editorial Review
  100.   if GetOption('GetReview') > 0 then
  101.   begin
  102.     Value := TextAfter(PageText, '<a name="amzn-reviews">');
  103.     if Value <> '' then
  104.     begin
  105.       Value := TextBetween(Value, '<b class=h1>Editorial Reviews</b>', '<a name="cust-reviews-section">');
  106.       Value := StringReplace(Value, #13#10, ' ');
  107.       Value := StringReplace(Value, '<br>', #13#10);
  108.       HTMLRemoveTags(Value);
  109.       HTMLDecode(Value);
  110.       Value := Trim(Value);
  111.       while Pos('  ', Value) > 0 do
  112.         Value := StringReplace(Value, '  ', ' ');
  113.       while Pos(#13#10, Value) = 1 do
  114.         Delete(Value, 1, 2);
  115.       case GetOption('GetReview') of
  116.         1:
  117.           if CanSetField(fieldDescription) then
  118.             SetField(fieldDescription, Value);
  119.         2:
  120.           if CanSetField(fieldComments) then
  121.             SetField(fieldComments, Value);
  122.       end;
  123.     end;
  124.   end;
  125.   // Director
  126.   if CanSetField(fieldDirector) then
  127.   begin
  128.     Value := TextBetween(PageText, '<b>Director:</b>','</a><br>');
  129.     HTMLRemoveTags(Value);
  130.     HTMLDecode(Value);
  131.     SetField(fieldDirector, Trim(Value));
  132.   end;
  133.   // Producer
  134.   if CanSetField(fieldProducer) then
  135.   begin
  136.     Value := TextBetween(PageText, '<b>Studio:</b>','<li>');
  137.     Value := StringReplace(Value, #13#10, '');
  138.     SetField(fieldProducer, Trim(Value));
  139.   end;
  140.   // Length
  141.   if CanSetField(fieldLength) then
  142.   begin
  143.     Value := TextBetween(PageText, '<b>Run Time:</b>','<br>');
  144.     SetField(fieldLength, Trim(Value));
  145.   end;
  146. end;
  147.  
  148. // ***** beginning of the program *****
  149.  
  150. begin
  151.   if CheckVersion(3,5,0) then
  152.   begin
  153.     AmazonPage := TStringList.Create;
  154.     AmazonPage.Text := GetPage('http://www.amazon.com/exec/obidos/search-handle-url/index=dvd&field-title=' + StringReplace(UrlEncode(GetField(fieldOriginalTitle)),'+', '%20'));
  155.     if FindLine('unable to find exact matches',AmazonPage,1) <> -1 then
  156.       begin
  157.         ShowMessage('Movie "' + GetField(fieldOriginalTitle) + '" not found.');
  158.         exit;
  159.       end
  160.     if FindLine('Amazon.com: DVD:',AmazonPage,1) <> -1 then
  161.       begin
  162.         LineNr := FindLine('<input type="hidden" name="asin.',AmazonPage,1);
  163.         THolder := AsinParse(AmazonPage.Getstring(LineNr));
  164.         AnalyzeMoviePage(THolder);
  165.         exit;
  166.       end
  167.     else
  168.       if (FindLine('Below are results for',AmazonPage,1) <> -1) OR (FindLine('All results',AmazonPage,1) <> -1) OR (FindLine('Most popular results for',AmazonPage,1) <> -1) OR (FindLine('Results for',AmazonPage,1) <> -1) then
  169.         begin
  170.           i := 1;
  171.           PickTreeClear;
  172.           PickTreeAdd('Movies','');
  173.           while (i <= AmazonPage.Count-1) do
  174.             begin
  175.               THolder := AmazonPage.GetString(i);
  176.               HTMLRemoveTags(THolder);
  177.               if (Pos('/exec/obidos/ASIN/',AmazonPage.GetString(i)) <> 0) and (THolder <> '') and (Pos('Buy new',AmazonPage.GetString(i)) = 0) and (Pos('Used & new from',AmazonPage.GetString(i)) = 0) and (Pos('THUMBZZZ',AmazonPage.GetString(i)) = 0) then
  178.                 PickTreeAdd(THolder,GetToken(AmazonPage.GetString(i),'/',5));
  179.               if (Pos('/exec/obidos/tg/detail/',AmazonPage.GetString(i)) <> 0) and (THolder <> '') and (Pos('Buy new',AmazonPage.GetString(i)) = 0) and (Pos('Used & new from',AmazonPage.GetString(i)) = 0) and (Pos('THUMBZZZ',AmazonPage.GetString(i)) = 0) and (Pos('http://www.amazon.com',AmazonPage.GetString(i)) = 0) and (Pos('In-store Pickup',AmazonPage.GetString(i)) = 0) then
  180.                 PickTreeAdd(THolder,GetToken(AmazonPage.GetString(i),'/',7));
  181.               i := i + 1;
  182.             end
  183.           if PickTreeExec(THolder) then
  184.             begin
  185.               AnalyzeMoviePage(THolder);
  186.             end
  187.           exit;
  188.         end
  189.       else
  190.         ShowMessage('Movie "' + GetField(fieldOriginalTitle) + '" not found.');
  191.     end
  192.   else
  193.     ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.5.0)');
  194. end.
  195.